<!--
 * @Descripttion: 
 * @version: 
 * @Author: Zuo
 * @Date: 2021-07-30 09:53:30
 * @LastEditors: Zuo
 * @LastEditTime: 2021-07-30 11:21:54
-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        /*  https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Error
            1.错误的类型
              Error:所有错误的父类型
              ReferenceError：引用的变量不存在
              TypeError： 数据类型不正确的错误
              RangeError：数据值不在其所允许的范围内
              SyntaxError:语法错误
            2.错误处理
              捕获错误：try ... catch
              抛出错误 throw error
            3.错误对象
              message属性：错误相关信息
              stack属性:函数调用栈记录信息    
        */

        //1.常见的内置错误  没有捕获error的话 出现错误后 下面的语句不会执行。
            //   ReferenceError：引用的变量不存在
            //  console.log(a)  // ReferenceError：a is not defined
            //   TypeError： 数据类型不正确的错误
            // let b = null;
            // b.xxx    //   TypeError: Cannot read property 'xxx' of null
            //   RangeError：数据值不在其所允许的范围内
            // function fn(){
            //     fn()
            // }
            // fn();  //无限递归，RangeError: Maximum call stack size exceeded
            //   SyntaxError:语法错误
            //const c = """";  // SyntaxError: Unexpected string

        // 2. 错误处理  
        // 捕获错误：try ... catch
        try{
            let d
            d.xxx
        }catch(error){
            console.log(error.message)
            console.log(error.stack)
        }
        console.log('捕获后，代码出错了可以继续执行')
        // 抛出错误 throw error 

        function demo(){
            throw new Error('有错误')
        }
        try{
            demo()
        }catch(error){
            console.log(error.message)
        }
    </script>
</body>
</html>